package org.ccay.core.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * 日期工具类
 * 
 * 
 * 
 */
public final class DateUtil {

	private DateUtil() {

	}

	/**
	 * 24小时制格式
	 */
	// private final SimpleDateFormat formate24 = new
	// SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	/**
	 * 12小时制格式
	 */
	// private final SimpleDateFormat formate12 = new
	// SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

	/**
	 * 24小时制数字串
	 */
	// private final SimpleDateFormat formate24numstr = new
	// SimpleDateFormat("yyyyMMddHHmmss");

	/**
	 * 日期格式(年月日)
	 */
	// private final SimpleDateFormat formateDate = new
	// SimpleDateFormat("yyyy-MM-dd");

	/** 毫秒制格式 */
	public static final String FORMATE_SSS = "yyyy-MM-dd HH:mm:ss.S";

	/**
	 * 转换成24小时格式字符串
	 * 
	 * @param inputDate
	 * @return
	 */
	public static String date24ToString(Date inputDate) {
		SimpleDateFormat formate24 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return formate24.format(inputDate);
	}

	/**
	 * 转换成12小时格式字符串
	 * 
	 * @param inputDate
	 * @return
	 */
	public static String date12ToString(Date inputDate) {
		SimpleDateFormat formate12 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		return formate12.format(inputDate);
	}

	/**
	 * 转换成24小时格式数字串
	 * 
	 * @param inputDate
	 * @return
	 */
	public static String date24ToNumberString(Date inputDate) {
		SimpleDateFormat formate24numstr = new SimpleDateFormat("yyyyMMddHHmmss");
		return formate24numstr.format(inputDate);
	}

	/**
	 * 转换成24小时格式数字串
	 * 
	 * @param inputDate
	 * @return
	 */
	public static String dateToDateString(Date inputDate) {
		SimpleDateFormat formateDate = new SimpleDateFormat("yyyy-MM-dd");
		return formateDate.format(inputDate);
	}

	/**
	 * 在某个时间中增加添加月
	 * 
	 * @param month
	 * @return String
	 * 
	 * @since 2012-07-02
	 */
	public static String addMonth(int month, Date inputDate) {
		// 创建一个日历对象
		GregorianCalendar cd = new GregorianCalendar();
		cd.setTime(inputDate);
		// 增加月
		cd.add(Calendar.MONTH, month);
		SimpleDateFormat formate12 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		return formate12.format(cd.getTime());
	}

	/**
	 * 比较两个日期的大小 d1>d2则 return 1,d1==d2则 return 0, d1<d2则return -1.
	 * 
	 * @param date
	 * @return int
	 * 
	 * @since 2012-07-26
	 */
	public static int dateCompare(Date d1, Date d2) {
		Calendar cdA = Calendar.getInstance();
		cdA.setTime(d1);
		Calendar cdB = Calendar.getInstance();
		cdB.setTime(d2);
		return cdA.compareTo(cdB);
	}

	/**
	 * 字符串转换成Date类型
	 * 
	 * @param str
	 * @return Date
	 * @throws ParseException
	 */
	public static Date stringToDate(String str) throws ParseException {
		SimpleDateFormat formateDate = new SimpleDateFormat("yyyy-MM-dd");
		return formateDate.parse(str);
	}

	/**
	 * 字符串转换成Date类型
	 * 
	 * @param str
	 * @return Date
	 * @throws ParseException
	 */
	public static String dateToString(Date inputDate) {
		SimpleDateFormat formateDate = new SimpleDateFormat("yyyy/MM/dd");
		return formateDate.format(inputDate);
	}

	/**
	 * 获得某个日期多少天之前的日期
	 * 
	 * 
	 * @since 2013-3-4
	 * @param d
	 * @param day
	 * @return
	 */
	public static Date getDateBefore(Date d, int day) {
		Calendar now = Calendar.getInstance();
		now.setTime(d);
		now.set(Calendar.DATE, now.get(Calendar.DATE) - day);
		return now.getTime();
	}

	/**
	 * 获得某个日期多少月之前的日期
	 * 
	 * 
	 * @since 2013-3-4
	 * @param d
	 * @param month
	 * @return
	 */
	public static Date getMonthBefore(Date d, int month) {
		// 创建一个日历对象
		Calendar now = Calendar.getInstance();
		now.setTime(d);
		// 增加月
		now.add(Calendar.MONTH, month);
		return now.getTime();
	}

	/**
	 * 转换成字符串格式
	 * 
	 * @param inputDate
	 * @param format
	 * @return
	 */
	public static String dateToString(Date inputDate, String format) {
		SimpleDateFormat formate = new SimpleDateFormat(format);
		return formate.format(inputDate);
	}
}
